package IOAndProperties.IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/*
    字节输入流一次读取多个字节的方法：
        int read(byte [] b)从输入流中读取一定数量的字节，并将其存储在缓冲数组b中

        注意：
            1、方法的参数byte[]的作用
                起到缓冲区的作用，存储每次读取到的多个字节
                数组的长度一般定义为1024（1kb）或者1024的整数倍
            2、方法的返回值int是什么？
                每次读取的有效字节个数
    string 类的构造方法
            string （byte [] bytes） 把字节数组转换为字符
            string （byte [] bytes，int offset, int length） 把字节数组的一部分转换为字符 offset：数组的开始索引 length：转换的字节个数
*/
public class InputStreamTest02 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream(new File("/Users/ivy/Documents/java/mydir/Input.txt"));
        /*
        byte[] bytes = new byte[2];
        int count = fis.read(bytes);
        */

        /*
        for (byte aByte : bytes) {
            System.out.println((char) aByte);
        }
        System.out.println(Arrays.toString(bytes));
        */


        //以下代码可以使用while循环来写，循环结束条件为 -1
/*
        System.out.println(count);//2
        System.out.println(new String(bytes));//AB

        count = fis.read(bytes);
        System.out.println(count);//2
        System.out.println(new String(bytes));//CD

        count = fis.read(bytes);
        System.out.println(count);//1
        System.out.println(new String(bytes));//ED

        count = fis.read(bytes);
        System.out.println(count);//-1
        System.out.println(new String(bytes));//ED
        fis.close();
*/

        byte[] bytes1 = new byte[1024];
        int count1 = 0;
        while ((count1 = fis.read(bytes1)) != -1) {
            System.out.println(count1);
            //缓冲过大，可以使用string （byte [] bytes，int offset, int length）
            //System.out.println(new String(bytes1));
            System.out.println(new String(bytes1, 0, count1));
        }
        fis.close();
    }
}
